package controle;

import sun.audio.*;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Random;

import modelo.Inimigo;

public class Batalha {
	
	Inimigo x;
	int dano;
	int gastoMana;
	int HPinicial;
	int MPinicial;
	String localAnterior;
	
	Main mainBatalha;
	
	public Batalha(Main m) {
		mainBatalha = m;
	}
	
	public void encontraBatalha(int rate) {
		
		int n = 500000;
		int result;
		Random randnum = new Random();
		
		result = randnum.nextInt(n + 1)*rate;
		if (result == 1) {
			localAnterior = mainBatalha.game.principal.foco;
			mainBatalha.game.principal.tipoFoco = "inimigo";
			mainBatalha.game.principal.foco = sorteiaInimigo();
		}
	}
	
	public void BattleStart (String s) {
			for(Inimigo l : mainBatalha.game.inimigos.listaInimigos) {  
				if (l.nome.matches(s)) {
					x = l;
					x.HP += (mainBatalha.game.principal.lvl - 1)*5;
					x.volume += (mainBatalha.game.principal.lvl - 1)*2;
					x.resistencia += (mainBatalha.game.principal.lvl - 1);
					HPinicial = x.HP;
					MPinicial = x.MP;
				}
			}
	}
	
	public void testaGolpe(String s) {
		if (mainBatalha.game.principal.MP >= 0) {
			if (mainBatalha.game.principal.classe.matches("Vocalista")) {
				
				if (s.matches("We are the Champions")) {
					dano = (int) ((mainBatalha.game.principal.precisao + mainBatalha.game.principal.feeling + 10)/( 1.5 * x.resistencia));
					gastoMana = 0;
				}
				else if (s.matches("Who wants to live forever")) {
					dano = (int) ((mainBatalha.game.principal.precisao + mainBatalha.game.principal.feeling + 20)/( 1.5 * x.resistencia));
					gastoMana = 2;
				}
				else if (s.matches("Bismillah!")) {
					dano = (int) ((mainBatalha.game.principal.precisao + mainBatalha.game.principal.feeling)/(x.resistencia));
					gastoMana = 3;
				}
				else if (s.matches("We will Rock you")) {
					dano = 120;
					gastoMana = mainBatalha.game.principal.MP; 
				}
				
			}
			else if (mainBatalha.game.principal.classe.matches("Guitarrista")) {
				
				if (s.matches("The Blues")) {
					
					dano = (int) (((mainBatalha.game.principal.velocidade*0) + (mainBatalha.game.principal.volume*3))/( 1.5 * x.resistencia));
					gastoMana = 2;
				}
				else if (s.matches("Mute")) {
					dano = (int) (((mainBatalha.game.principal.velocidade*3) + (mainBatalha.game.principal.volume*0))/( 1.5 * x.resistencia));
					gastoMana = 2;
				}
				else if (s.matches("The Riff")) {
					dano = (int) ((mainBatalha.game.principal.velocidade + mainBatalha.game.principal.volume)/( 1.5 * x.resistencia));
					gastoMana = 0;
				}
				else if (s.matches("Distortion")) {
					dano = (int) ((mainBatalha.game.principal.velocidade + mainBatalha.game.principal.volume + mainBatalha.game.principal.feeling)/( 2 * x.resistencia));
					gastoMana = 4;
				}
				
			}
			else if (mainBatalha.game.principal.classe.matches("Baixista")) {
				
				if (s.matches("Blues")) {
					dano = (int) ((mainBatalha.game.principal.feeling + mainBatalha.game.principal.volume)/ (1.5 * x.resistencia));
					gastoMana = 0;
					
				}
				else if (s.matches("Cool Bass")) {
					dano = (int) (((mainBatalha.game.principal.feeling*1.75) + mainBatalha.game.principal.volume)/( 1.5 * x.resistencia));
					gastoMana = 2;
				}
				else if (s.matches("Forever Bass")) {
					dano = (int) ((mainBatalha.game.principal.feeling - mainBatalha.game.principal.velocidade + (mainBatalha.game.principal.volume*3))/( 1.5 * x.resistencia));
					if (dano < 0) dano = - dano;
					gastoMana =3;
				}
				else if (s.matches("Purebass")) {
					dano = (int) ((mainBatalha.game.principal.feeling + mainBatalha.game.principal.volume)/(x.feeling));
					gastoMana = 4;
				}
			}
			else if (mainBatalha.game.principal.classe.matches("Tecladista")) {
				
				if (s.matches("Arpeggio")) {
					dano = (int) ((mainBatalha.game.principal.precisao + mainBatalha.game.principal.volume)/(1.5 * x.resistencia));
					gastoMana = 0;
				}
				else if (s.matches("Scale Down")) {
					dano = (int) ((mainBatalha.game.principal.precisao*1.75 + mainBatalha.game.principal.volume*0.75)/(1.5 * x.resistencia));
					gastoMana = 2;
				}
				else if (s.matches("Finger On")) {
					dano = (int) ((mainBatalha.game.principal.precisao + mainBatalha.game.principal.volume*3)/(1.5 * x.resistencia));
					gastoMana = 2;
					
				}
				else if (s.matches("Calm Melody")) {
					dano = (int) ((mainBatalha.game.principal.precisao + mainBatalha.game.principal.volume)/(1.5 * (x.resistencia/2.5)));
					gastoMana = 2;
				}
			}
			else if (mainBatalha.game.principal.classe.matches("Baterista")) {
				
				if (s.matches("Loud")) {
					dano = (int) ((mainBatalha.game.principal.volume*2)/(1.5 * x.resistencia));
					gastoMana = 0;
					
				}
				else if (s.matches("Fast Pace")) {
					dano = (int) ((mainBatalha.game.principal.velocidade + mainBatalha.game.principal.volume)/(1.5 * x.resistencia));
					gastoMana = 2;
				}
				else if (s.matches("Hard Rock")) {
					dano = (int) ((mainBatalha.game.principal.feeling + mainBatalha.game.principal.volume)/(1.5 * x.resistencia));
					gastoMana = 2;
				}
				else if (s.matches("Techno")) {
					dano = (int) (( mainBatalha.game.principal.velocidade + mainBatalha.game.principal.feeling + mainBatalha.game.principal.volume)/(1.5 * x.resistencia));
					gastoMana = 3;
				}
			}
		}
		else if (mainBatalha.game.principal.MP - gastoMana < 0){
			mainBatalha.game.principal.MP = 0;
		}
	}
	
	public String Battle() {
		x.HP -= dano;
		x.MP -= 1;
		
		if (x.MP > 0) {
			mainBatalha.game.principal.alteraStatus(calcDano(x), gastoMana);
		}
		else {
			x.MP = 0;
			mainBatalha.game.principal.alteraStatus(0, gastoMana);
		}
		
		if (x.HP <= 0)
		{
			mainBatalha.game.principal.HP = mainBatalha.game.principal.HPmax;
			mainBatalha.game.principal.MP = mainBatalha.game.principal.MPmax;
			x.HP = HPinicial;
			x.MP = MPinicial;
			return "VICTORY!";
		}
		if (mainBatalha.game.principal.HP <= 0) {
			
			x.HP = HPinicial;
			x.MP = MPinicial;
			
			return "DEFEAT!";
		}
		
		dano = gastoMana = 0;
		
		return (x.nome + ":"  + "\n" + x.descricao + "\nHP do inimigo: " + x.HP + "\nMP do inimigo: " + x.MP + "\n\nHP:" + mainBatalha.game.principal.HP + "\nMP:" + mainBatalha.game.principal.MP);
	}
	
	public int calcExp() {
		
		int exp = (int)((x.volume + x.feeling + x.precisao + x.resistencia + x.velocidade*3));
		
		mainBatalha.game.principal.alteraLevel(exp);
		
		return exp;
	}
	
	int calcDano(Inimigo x) {
		return (int) ((x.precisao + x.volume)/(2 * mainBatalha.game.principal.resistencia));
	}
	
	String sorteiaInimigo() {
		
		Random randnum = new Random();
		int rn = randnum.nextInt(mainBatalha.game.inimigos.listaInimigos.size());
		
		String s = mainBatalha.game.inimigos.listaInimigos.get(rn).nome;
		return s;
	}
	
	public String getLocalAnterior() {
		return localAnterior;
	}
}
